﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//占位符就是%d  %s  %f这种符号
//printf（）参数与占位符是一一对应关系，如果有n个占位符，printf（）的参数就应该有n+1个。如果参数个数少于对应的占位符，printf()可能会输出内存中的任意值
//printf("sum=%d",3);中的sum=也属于一个参数


//%c:字符
//%d:十进制整数//int
//%f：小数（包含float类型和double类型）//float--%f   double--%lf
//%hd:十进制short int类型
//%hu:unsigned short int类型
//%ld：十进制long int 类型
//%lu:unsigned long int 类型
//%Lf：long double类型浮点数
//%p：指针（用来打印地址）
//%s：字符串
//%u:无符号整数（unsigned int）
//%x:十六进制整数
//%zd:size_t类型






//printf()可以定制占位符的输出格式
//printf()允许限定占位符的最小宽度
//int main()
//{
//	printf("%d\n", 123);
//	printf("%5d\n", 123);//最少位次为五位，数字向右对齐
//	printf("%-5d\n", 123);//最少位次为五位，数字向左对齐
//	printf("%5d", 123456);
//	return 0;
//}


//int main()
//{
//	printf("%lf\n", 123.45);//%f与%lf再打印的时候，小数点后默认是打印六位
//	printf("%12lf\n", 123.45);
//
//	return 0;
//}




//int main()
//{
//
//	printf("%d\n", 123);//123
//	printf("%d\n", -123);//-123
//
//	printf("%+d\n", 123);//+123
//	printf("%+d\n", -123);//-123
//	//在d前边加上一个+可以让输出的数字总是保留正负号
//
//	return 0;
//}



//int main()
//{
//	printf("%.2lf\n", 123.45);//限定小数点后数字，该位置是限定两位
//	printf("%.3lf\n", 123.45);
//	printf("%.1lf\n", 123.45);//最后会四舍五入
//	printf("%12.1lf\n", 123.45);//既限制输出数字的总宽度，又限制小数点后的位次
//
//	return 0;
//}



//int main()
//{
//	printf("%*.*f\n", 6, 2, 0.5);//等同于printf（"%6.2f\n",0.5）；
//	return 0;
//}
//上面事例中，%*.*的两个星号通过printf()的两个参数6和2传入



//int main()
//{
//	printf("%s\n", "abcdef");//默认是全部输出
//	printf("%.3s\n","abcdef");//输出部分字符串
//	return 0;
//}





//int main()
//{
//
//	int score = 0;
//	printf("请输入成绩：");
//	scanf("%d",&score);//完成输入操作
//	//scanf函数中占位符的后面的参数需要的是地址
//	//& —— 取地址操作符,&score —— 取出地址
//	printf("成绩是%d\n", score);
//
//	return 0;
//}
//scanf()函数用于读取用户的键盘输入
//程序运行到这个语句时，会停下来，等待用户从键盘输入
//用户输入数据、按下回车键后，scanf()就会处理用户的输入，将其存入变量
//输入的数据应与前边的占位数类型一致




//int main()
//{
//	int a = 0;
//	int b = 0;
//	float f1 = 0.0;
//	float f2 = 0.0;
//
//	scanf("%d %d %f %f", &a, &b, &f1, &f2);//可以一次性输入多个数
//	printf("%d %d %f %f\n", a, b, f1, f2);
//	return 0;
//}
//scanf()处理数据占位时，会自动过滤空白字符，包括空格、制表符、换行符等


//int main()
//{
//	int x;
//	float y;
//
//	// ⽤⼾输⼊ " -13.45e12# 0"
//	scanf("%d", &x);
//	printf("%d\n", x);//-13
//	scanf("%f", &y);
//	printf("%f\n", y);//450000000000//浮点数在内存中有可能无法精确保存
//	return 0;
//}
//scanf()处理用户输入的原理是，用户的输入先放入缓存，等到按下回车键后，按照占位符对缓存进行解读。
//解读用户输入时，会从上一次解读遗留的第一个字符开始，直到读完缓存，或者遇到第一个不符合条件的字符为止



//int main()
//{
//	int a;
//	int b;
//	scanf("%d,%d", &a, &b);//在输入时应与代码中的格式一样，既a，b
//	printf("%d %d", a, b);
//	return 0;
//}





//scanf的返回值
//scanf()的返回值是一个整数，表示成功读取的变量个数
//如果没有读取任何项，或者匹配失败，则返回0
//如果在成功读取任何数据之前，发生了读取错误或者遇到读取到文件结尾，则返回常量EOF（-1）
//EOF——end of file

//int main()
//{
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	int d = 0;
//	int ret = scanf("%d %d %d %d", &a, &b, &c, &d);//三次Ctrl+Z可以停下取值
//	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
//	printf("ret = %d\n", ret);
//	return 0;
//}


//常用的占位符
//%c:字符
//%d:整数
//%f:float类型浮点数
//%lf:double类型浮点数
//%Lf:long double类型浮点数
//%s:字符串
//%[]:在方括号中指定一组匹配的字符（比如%[0~9]）,遇到不在集合之中的字符，匹配将会停止
//上面所有占位符之中，除了%c以外，都会自动忽略起首的空白字符。
//%c不忽略空白字符，总是返回当前第一个字符，无论该字符是否为空格
//int main()
//{
//	char ch = 0;
//	scanf("%c", &ch);//无法跳过空格
//	printf("xxxx%cyyyy", ch);
//	
//	return 0;
//}

//int main()
//{
//	char ch = 0;
//	scanf(" %c", &ch);//在%c前面加一个空格就可以跳过空格（表示跳过零个或多个空白字符）
//	printf("xxxx%cyyyy", ch);
//	return 0;
//}



//int main()
//{
//	char arr[20] = { 0 };//数组
//	scanf("%s", arr);//arr是数组名，数组名就是地址
//	printf("%s\n", arr);
//	return 0;
//}
//%s是从当前第一个非空白字符开始读起，直到遇到空白字符（即空格、换行符、制表符等）为止
//scanf()遇到%s占位符，会在字符串变量末尾存储一个空字符\0

//scanf()将字符串读入字符数组时，不会检测字符串是否超过了数组长度。
//所以，存储字符串时，很可能会超过数组的边界，导致程序崩溃。
//为了防止这种情况，使用占位符%s时，应该指定读入字符串的最长长度，即写成%[m]s占位符，其中的[m]是一个整数，表示读取字符串的最大长度，后面的字符将被丢弃

//int main()
//{
//	char arr[5] = { 0 };
//	scanf("%4s", arr);
//	printf("%s\n", arr);
//
//	return 0;
//}





//赋值忽略符
//int main()
//{
//	int year = 0;
//	int month = 0;
//	int day = 0;
//	scanf("%d-%d-%d", &year, &month, &day);//格式限制于x-x-x，其他格式不可以
//	printf("%d %d %d", year, month,day);
//	return 0;
//}
//int main()
//{
//	int year = 0;
//	int month = 0;
//	int day = 0;
//	scanf("%d%*c%d%*c%d", &year, &month, &day);//任何格式都可以
//	printf("%d %d %d", year, month,day);
//	return 0;
//}



//在创建变量的时候，给变量一个初始值，是一个好的编译习惯
//如果不给变量初始化，有的编译器会报错

int main()
{
	int a;
	printf("%d\n", a);//局部变量不初始化的时候，它的值是随机的；全局变量如果不初始化，默认值是0
	return 0;
}



